widget: Pass parent to gtk_widget_consumes_motion()
authorAlexander Mikhaylenko <alexm@gnome.org>
Sat, 2 May 2020 15:34:15 +0000 (20:34 +0500)
committerAlexander Mikhaylenko <alexm@gnome.org>
Thu, 7 May 2020 04:44:15 +0000 (09:44 +0500)
Right now it assumes that the parent is a GtkWindow. This will break when
window dragging is handled by another widget.

gtk/gtkwidget.c
gtk/gtkwidgetprivate.h
gtk/gtkwindow.c

index 167d9a15ab7f3b66446a6fe4d13f492036e8b022..d2a821fa3b2bbc159d4f7838bff6a947874dac28 100644 (file)
@@ -11439,12 +11439,13 @@ gtk_widget_remove_controller (GtkWidget          *widget,
 }
 
 gboolean
-_gtk_widget_consumes_motion (GtkWidget        *widget,
-                             GdkEventSequence *sequence)
+gtk_widget_consumes_motion (GtkWidget        *widget,
+                            GtkWidget        *parent,
+                            GdkEventSequence *sequence)
 {
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
 
-  while (widget != NULL && !GTK_IS_WINDOW (widget))
+  while (widget != NULL && widget != parent)
     {
       guint i;
 
index 5a92e75e5d714e927a7e1a3ad47467b9960d9cf9..6d3fadb9293b7d4bf6e7782aa8962b6d824a9f06 100644 (file)
@@ -281,8 +281,9 @@ void              _gtk_widget_update_parent_muxer          (GtkWidget    *widget
 GtkActionMuxer *  _gtk_widget_get_action_muxer             (GtkWidget    *widget,
                                                             gboolean      create);
 
-gboolean          _gtk_widget_consumes_motion              (GtkWidget           *widget,
-                                                            GdkEventSequence    *sequence);
+gboolean          gtk_widget_consumes_motion               (GtkWidget        *widget,
+                                                            GtkWidget        *parent,
+                                                            GdkEventSequence *sequence);
 
 gboolean          gtk_widget_has_tick_callback             (GtkWidget *widget);
 
index bc79bd3d281b9d9052f1ed6844eba1f543e5e774..883c1117b594a5a9048a8ce5bdc46a6cf6a7ecf6 100644 (file)
@@ -1472,7 +1472,7 @@ drag_gesture_update_cb (GtkGestureDrag *gesture,
            */
           if (event_widget != GTK_WIDGET (window) &&
               !gtk_widget_has_grab (event_widget) &&
-              _gtk_widget_consumes_motion (event_widget, sequence))
+              gtk_widget_consumes_motion (event_widget, GTK_WIDGET (window), sequence))
             {
               gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED);
               return;